package com.alex.designPattern.proxy.dynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 使用jdk中的动态代理接口实现动态代理模型，invocationhandler要求代理的类必须实现接口。
 * 如果被代理的类是使用继承的方式，则可以使用cglib、asm
 * @author alex
 *
 */
public class DynamicProxy implements InvocationHandler {
	
	private Object target;
	
	public Object bind(Object obj){
		this.target = obj;
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), 
				obj.getClass().getInterfaces(), this);
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		System.out.println("Before invoke");
		result = method.invoke(target, args);
		System.out.println("After invoke");
		return result;
	}
}
